package com.lvyq.myplayer.common.shared

import android.content.Context
import android.content.SharedPreferences
import com.google.gson.Gson
import com.lvyq.myplayer.parcelable.EventPlayState
import com.lvyq.myplayer.parcelable.SongInfoData
import com.lvyq.myplayer.service.AudioService

/**
 * 文件描述：MainAudioSharedPrefsManager 音乐存储相关
 * 作者：lvyq
 * 创建时间：2025-05-29
 * 修改时间：2025-05-29
 */
object MainAudioSharedPrefsManager{
    private const val PREF_NAME = "indexAudio"
    private const val KEY_PLAY_MUSIC = "audio_play_last"
    private const val KEY_PLAY_LIST = "audio_play_list"
    private const val KEY_PLAY_CURRENT_KEY = "audio_play_current_key"
    private const val KEY_PLAY_CURRENT_POSITION = "audio_play_current_position"
    private const val KEY_PLAY_STATE = "audio_play_state"

    private fun getPrefs(context: Context): SharedPreferences {
        return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
    }

    // 保存当前播放音乐id
    fun saveCurrentAudioId(context: Context, songId: String?) {
        getPrefs(context).edit { putString(KEY_PLAY_CURRENT_KEY, songId) }
    }

    // 获取当前播放音乐id
    fun getCurrentAudioId(context: Context):String? {
       return getPrefs(context).getString(KEY_PLAY_CURRENT_KEY, "-1")
    }

    // 保存当前播放音乐id
    fun saveCurrentAudioPosition(context: Context, currentPosition: String?) {
        getPrefs(context).edit { putString(KEY_PLAY_CURRENT_POSITION, currentPosition) }
    }
    // 获取当前播放音乐id
    fun getCurrentAudioPosition(context: Context):String? {
        return getPrefs(context).getString(KEY_PLAY_CURRENT_POSITION, "-1")
    }


    // 保存单个音乐信息
    fun saveSongInfo(context: Context, data: SongInfoData?) {
        val json = Gson().toJson(data)
        getPrefs(context).edit { putString(KEY_PLAY_MUSIC, json) }
    }

    // 获取单个音乐信息
    fun getSongInfo(context: Context): SongInfoData? {
        val json = getPrefs(context).getString(KEY_PLAY_MUSIC, "") ?: return null
        return try {
            Gson().fromJson(json, SongInfoData::class.java)
        } catch (e: Exception) {
            null
        }
    }

    // 保存音乐列表
    fun saveSongInfoList(context: Context, list: ArrayList<SongInfoData>) {
        val json = Gson().toJson(list)
        getPrefs(context).edit { putString(KEY_PLAY_LIST, json) }
    }

    // 获取音乐列表
    fun getSongInfoList(context: Context): ArrayList<SongInfoData> {
        val json = getPrefs(context).getString(KEY_PLAY_LIST, "") ?: return ArrayList()
        return try {
            Gson().fromJson(json, Array<SongInfoData>::class.java).toCollection(ArrayList())
        } catch (e: Exception) {
            ArrayList()
        }
    }


    // 保存音乐播放状态
    fun savePlayState(context: Context,playState: String) {
        getPrefs(context).edit { putString(KEY_PLAY_STATE, playState) }
    }
    fun getPlayState(context: Context): String? {
        return getPrefs(context).getString(KEY_PLAY_STATE, "false")
    }

    // 扩展函数：直接编辑SharedPreferences
    private inline fun SharedPreferences.edit(action: SharedPreferences.Editor.() -> Unit) {
        val editor = edit()
        action(editor)
        editor.apply()
    }


}